#include <iostream>
#include <unistd.h>
#include <cstring>
#include <sys/wait.h>

int main() 
{
    int pipefd[2]; // 文件描述符数组，pipefd[0] 用于读取，pipefd[1] 用于写入
    pid_t pid;

    // 创建管道
    if (pipe(pipefd) == -1) 
    {
        perror("pipe");
        return 1;
    }

    // 创建子进程
    pid = fork();
    if (pid == -1) 
    {
        perror("fork");
        return 1;
    }

    if (pid == 0) 
    {
        // 子进程
        close(pipefd[0]); // 关闭读取端

        const char* message = "hellworld";
        write(pipefd[1], message, strlen(message)); // 向管道中写入数据
        close(pipefd[1]); // 关闭写入端
        return 0;
    } 
    else 
    {
        // 父进程
        close(pipefd[1]); // 关闭写入端

        char buffer[100];
        ssize_t bytesRead = read(pipefd[0], buffer, sizeof(buffer) - 1); // 从管道中读取数据
        if (bytesRead >= 0) 
        {
            buffer[bytesRead] = '\0'; // 确保字符串以 null 结尾
            std::cout << "父进程读取到: " << buffer << std::endl;
        } 
        else 
        {
            perror("read");
        }

        close(pipefd[0]); // 关闭读取端
        wait(NULL); // 等待子进程结束
    }

    return 0;
}
